Grundkurs SQL

5.1  Unterabfragen in SQL

MySQL ist schnell und leicht zu bedienen, dafür fehlt allerdings manche Funktionalität, die bei anderen SQL-Datenbanken zur Standardausstattung gehört.
Beispielsweise fehlte bis zur Version 4.1 in MySQL die Funktionalität für Unterabfragen, mit denen wir uns hier beschäftigen wollen. In diesem Kurs arbeiten wir mit der MySQL Version 5.xx und können die Unterabfragen auch mit phpMyAdmin testen.
Wir werden in dieser Lektion zeigen wie man mit Unterabfragen arbeitet und versuchen auch die eine oder andere Abfrage mit den herkömmlichen Methoden umzubauen.

Was sind aber Unterabfragen, und wozu sind sie gut?

Abfragen, die einen einzigen Wert zurückliefern, können als Unterabfragen (Subquery) in andere Abfragen eingesetzt werden.

Mit Unterabfragen haben Sie die Möglichkeit, mehrere Dinge gleichzeitig abzufragen und die Ergebnisse wiederum einzugrenzen. Beispielsweise wird es damit möglich, einfache Attributnamen mit Aggregatfunktionen in Beziehung zu setzen, um etwa zu erfahren, welcher Mitarbeiter denn nun der am besten Bezahlte oder der am schlechtesten Bezahlte ist, statt nur das Bruttogehalt zu sehen und nicht den Namen. Die Form dieser Abfragen besteht aus verschachtelten SELECT-Abfragen:

SELECT ...
FROM   ...
WHERE  Feld Operator (SELECT ... FROM ... WHERE ...)

Je nach Größe der entstehenden Konstruktion können wir die Schreibweise anpassen, um die Übersicht zu behalten:

SELECT ...
FROM   ...
WHERE  Feld Operator (SELECT ...
                      FROM   ...
                      WHERE  ...)

Dabei wird die unterste (hinterste) SELECT-Abfrage immer zuerst ausgewertet (eine Vorselektion), daher ist auch die Klammerung nötig. Das in der untersten SELECT-Anweisung erhaltene Ergebnis wird dazu verwendet, um die obere Selektion weiter einzuschränken.